require("AI");
require("States");
require("Utils");

Templates = {
	newTemplate = function(templateType)
		local c = table.copy(templateType);
		c.box = table.copy(templateType.box);
		return c;
	end
}

AssaultUnit = {
		
	hp = 20,
    range = 100,
    damage = 1,
    area = 1,
    rateOfFire = 10,
    speed = 50,
    cost = 10,
	
	box = {x = 5, y = 0, w = 20, h = 36};
	
	imageName = "AssaultUnit.png",
	initState = States.IDLE,
	aiAction = AI.seekAndDestroy_CommonGun,
	
	sprites = {
		lenX = 6,  -- quantidade de sprites em uma linhas
		lenY = 3,  -- quantidade de sprites em uma coluna
		
		-- Sequência de sprites para animar no estado utilizado como chave
		IDLE = {11},
		WALK = {1,2,3,4,5,6},
		ATTACK = {7,8,9},--,10,11,12},
		DEAD = {13},
		RELOADING = {10}
	}
};

MachineGunUnit = {
        
    hp = 20,
    range = 300,
    damage = 1,
    area = 1,
    rateOfFire = 10,
    speed = 20,
    cost = 10,
    
    box = {x = 26, y = 0, w = 20, h = 30};
    
    imageName = "MachineGunUnit.png",
    initState = States.IDLE,
    aiAction = AI.seekAndDestroy_CommonGun,
    
    sprites = {
        lenX = 4,  -- quantidade de sprites em uma linhas
        lenY = 3,  -- quantidade de sprites em uma coluna
        
        -- Sequência de sprites para animar no estado utilizado como chave
        IDLE = {3},
        WALK = {1,2,3,4,5,6},
        ATTACK = {7,8,9},
        DEAD = {11},
        RELOADING = {10}
    }
};

PistolUnit = {
        
    hp = 20,
    range = 100,
    damage = 1,
    area = 1,
    rateOfFire = 10,
    speed = 20,
    cost = 10,
    
    box = {x = 5, y = 0, w = 20, h = 36};
    
    imageName = "PistolUnit.png",
    initState = States.IDLE,
    aiAction = AI.seekAndDestroy_CommonGun,
    
    sprites = {
        lenX = 6,  -- quantidade de sprites em uma linhas
        lenY = 3,  -- quantidade de sprites em uma coluna
        
        -- Sequência de sprites para animar no estado utilizado como chave
        IDLE = {3},
        WALK = {1,2,3,4,5,6},
        ATTACK = {7,8,9},
        DEAD = {13},
        RELOADING = {9}
    }
};

RocketLauncherUnit = {

    hp = 8,
    range = 300,
    damage = 20,
    area = 50,
    rateOfFire = 1,
    speed = 50,
    cost = 30,
    
    box = {x = 5, y = 0, w = 20, h = 30};
    
    imageName = "RocketLauncherUnit.png",
    initState = States.IDLE,
    aiAction = AI.seekAndDestroy_BulletGun,
    
    sprites = {
        lenX = 5,  -- quantidade de sprites em uma linhas
        lenY = 3,  -- quantidade de sprites em uma coluna
        
        -- Sequência de sprites para animar no estado utilizado como chave
        IDLE = {1},
        WALK = {1,2,3,4,5,6},
        ATTACK = {10,10,10,10,10,7,8,9},
        DEAD = {11},
        RELOADING = {10}
    }
};

SniperRifleUnit = {

    hp = 20,
    range = 100,
    damage = 1,
    area = 1,
    rateOfFire = 10,
    speed = 20,
    cost = 10,
    
    box = {x = 30, y = 0, w = 20, h = 30};
    
    imageName = "SniperRifleUnit.png",
    initState = States.IDLE,
    aiAction = AI.seekAndDestroy_CommonGun,
    
    sprites = {
        lenX = 4,  -- quantidade de sprites em uma linhas
        lenY = 3,  -- quantidade de sprites em uma coluna
        
        -- Sequência de sprites para animar no estado utilizado como chave
        IDLE = {2},
        WALK = {1,2,3,4,5,6},
        ATTACK = {7,8,9},
        DEAD = {11},
        RELOADING = {10}
    }
};

ShotgunUnit = {

    hp = 20,
    range = 100,
    damage = 1,
    area = 1,
    rateOfFire = 10,
    speed = 20,
    cost = 10,
    
    box = {x = 10, y = 0, w = 20, h = 30};
    
    imageName = "ShotgunUnit.png",
    initState = States.IDLE,
    aiAction = AI.seekAndDestroy_CommonGun,
    
    sprites = {
        lenX = 6,  -- quantidade de sprites em uma linhas
        lenY = 2,  -- quantidade de sprites em uma coluna
        
        -- Sequência de sprites para animar no estado utilizado como chave
        IDLE = {2},
        WALK = {1,2,3,4,5,6},
        ATTACK = {7,8,9},
        DEAD = {11},
        RELOADING = {10}
    }
};


Base = {
		
	hp = 500,
    range = 0,
    damage = 0,
    area = 0,
    rateOfFire = 0,
    speed = 0,
    cost = 0,
	
	box = {x = 0, y = 0, w = 150, h = 130},
	
	imageName = "Base.png",
	initState = States.IDLE,
	aiAction = AI.base,
	
	sprites = {
		lenX = 2,  -- quantidade de sprites em uma linhas
		lenY = 1,  -- quantidade de sprites em uma coluna
		
		-- Sequência de sprites para animar no estado utilizado como chave
		IDLE = {1},
		WALK = {1},
		ATTACK = {1},--,10,11,12},
		DEAD = {2},
		RELOADING = {1}
	}
};

BulletTemplate = {
	speed = 100, 
	area = 100,
	damage = 100,
	
	box = {x = 16, y = 16, w = 32, h = 32},
	
	imageName = "bullet.png",
	initState = States.IDLE,
	
	sprites = {
		lenX = 4,  -- quantidade de sprites em uma linhas
		lenY = 5,  -- quantidade de sprites em uma coluna
		
		-- Sequência de sprites para animar no estado utilizado como chave
		IDLE = {17},
		WALK = {17},
		ATTACK = {17},--,10,11,12},
		DEAD = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,0},
		RELOADING = {17}
	}
};
